home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Programming / AmigaTalk / User / Curses.st < prev    next >
Text File  |  2000-02-13  |  12KB  |  398 lines

  1. " ------------------------------------------------------------- "
  2. " Curses.st - Implementation of Curses library functions for    "
  3. "              AmigaTalk.                                       "
  4. " ------------------------------------------------------------- "
  5.  
  6. Class Curses :Object
  7. ! windowCount !
  8. [
  9.   new
  10.     windowCount <- 0.
  11.     ^ self
  12. |
  13.   initialize
  14.     <primitive 124 1>. " initscr() "
  15.     ^ self
  16. |
  17.   closeDown
  18.     ^ <primitive 124 0> " endwin() "
  19. |
  20.   initializeWithColors: depth
  21.     <primitive 124 7 depth>.    " StartColor( depth) "
  22.     <primitive 124 1>.          " initscr()          "
  23.     ^ self
  24. |
  25.   initWithStdColors
  26.     <primitive 124 7>.    " start_colors() "
  27.     <primitive 124 1>.    " initscr()      "
  28.     ^ self
  29. |
  30.   openWindow: xStart yStart: y width: w height: h ! temp !
  31.     (windowCount < 50)
  32.       ifTrue: [ temp <- <primitive 124 2 h w y xStart>. " newwin() "
  33.                 windowCount <- windowCount + 1.
  34.                 ^ temp
  35.               ]
  36. |
  37.   openSubWindow: parent xStart: x yStart: y width: w height: h ! temp ! 
  38.     (windowCount < 50)
  39.       ifTrue: [ temp <- <primitive 124 4 parent h w y x>. " subwin() "
  40.                 windowCount <- windowCount + 1.
  41.                 ^ temp
  42.               ]
  43. |
  44.   refreshScreen
  45.     ^ <primitive 124 9>            " refresh()  "
  46. |
  47.   refreshWindow: winNumber
  48.     ^ <primitive 124 10 winNumber> " wrefresh() "
  49. |
  50.   closeWindow: winNumber ! temp !
  51.     temp        <- <primitive 124 3 winNumber>. " delwin() "
  52.     windowCount <- windowCount - 1.
  53.     self refreshScreen.
  54.     ^ temp
  55. |
  56.   drawBorder: winNumber hChar: hc vChar: vc
  57.     <primitive 124 5 winNumber vc hc>. " box() "
  58.     ^ self refreshWindow: winNumber
  59. |
  60.   moveWindow: winNumber x: x y: y
  61.     <primitive 124 74 winNumber y x>.  " mvwin() "
  62.     ^ self refreshWindow: winNumber
  63. |
  64.   beep
  65.     ^ <primitive 124 83>
  66. |
  67.   flash
  68.     ^ <primitive 124 84>
  69. |
  70.   cBreak: status
  71.     (status == true )
  72.       ifTrue:  [ ^ <primitive 124 65> ] " cbreak()   "
  73.       ifFalse: [ ^ <primitive 124 66> ] " nocbreak() "
  74. |
  75.   enableClear: winNumber status: status
  76.     (status == true)
  77.       ifTrue:  [ ^ <primitive 124 71 winNumber 1> ] " clearok( TRUE  ) "
  78.       ifFalse: [ ^ <primitive 124 71 winNumber 0> ] " clearok( FALSE ) "
  79. |
  80.   enableCursor: winNumber status: status
  81.     (status == true)
  82.       ifTrue:  [ ^ <primitive 124 72 winNumber 1> ] " leaveok( TRUE  ) "
  83.       ifFalse: [ ^ <primitive 124 72 winNumber 0> ] " leaveok( FALSE ) "
  84. |
  85.   newlineMap: status
  86.     (status == true )
  87.       ifTrue:  [ ^ <primitive 124 67> ] " nl()   "
  88.       ifFalse: [ ^ <primitive 124 68> ] " nonl() " 
  89. |
  90.   echo: status
  91.     (status == true )
  92.       ifTrue:  [ ^ <primitive 124 69> ] " echo()   "
  93.       ifFalse: [ ^ <primitive 124 70> ] " noecho() "
  94. |
  95.   enableDelay: winNumber status: status  
  96.     (status == true)
  97.       ifTrue:  [ ^ <primitive 124 73 winNumber 0> ] " nodelay( FALSE ) "
  98.       ifFalse: [ ^ <primitive 124 73 winNumber 1> ] " nodelay( TRUE  ) "
  99. |
  100.   hasColors
  101.     ^ <primitive 124 6> " has_colors() "
  102. |
  103.   setColor: number red: r green: g blue: b
  104.     <primitive 124 8 number r g b>.
  105.     ^ self refreshScreen
  106. |
  107.   setTextPenColor: colornum
  108.     ^ <primitive 124 85 colornum>
  109. |
  110.   setBackPenColor: colornum
  111.     ^ <primitive 124 86 colornum>
  112. |
  113.   setDrawMode: mode
  114.     ^ <primitive 124 87 mode>
  115. |
  116.   enableScroll: winNumber status: status
  117.     (status == true)
  118.       ifTrue:  [ ^ <primitive 124 76 winNumber 1> ] " scrollok( TRUE  ) "
  119.       ifFalse: [ ^ <primitive 124 76 winNumber 0> ] " scrollok( FALSE ) "
  120. |
  121.   enableKeyPad: winNumber status: status
  122.   " This will allow the following key values to be received:
  123.  
  124.     KEY_BACKSPACE   0010          /* backspace character */
  125.     KEY_DC          0177          /* Delete character    */
  126.     KEY_DOWN        0400          /* The down arrow key  */
  127.     KEY_UP          0401          /* The up arrow key    */
  128.     KEY_LEFT        0402          /* The left arrow key  */
  129.     KEY_RIGHT       0403          /* The right arrow key */
  130.     KEY_HELP        0404          /* Help Key            */
  131.     KEY_F0          0405          /* Function keys       */
  132.     KEY_F(n)        (KEY_F0+(n))
  133.   "
  134.     (status == true)
  135.       ifTrue:  [ ^ <primitive 124 75 winNumber 1> ] " keypad( TRUE  ) "
  136.       ifFalse: [ ^ <primitive 124 75 winNumber 0> ] " keypad( FALSE ) "
  137. |
  138.   scrollWindow: winNumber
  139.     <primitive 124 77 winNumber>.    " scroll() "
  140.     ^ self refreshWindow: winNumber
  141. |
  142.   setScrollRegion: top Bottom: bott
  143.     <primitive 124 78 top bott>.     " setscrreg() "
  144.     ^ self refreshScreen
  145. |
  146.   setWindowScrollRegion: winNumber top: top Bottom: bott
  147.     <primitive 124 79 winNumber top bott>. " wsetscrreg() "
  148.     ^ self refreshWindow: winNumber
  149. |
  150.   windowNeedsRefresh: winNumber
  151.     ^ <primitive 124 80 winNumber>
  152. |
  153.   printChar: c
  154.     <primitive 124 37 c>.            " addch() "
  155.     ^ self refreshScreen
  156. |
  157.   printWindowChar: winNumber char: c 
  158.     <primitive 124 38 winNumber c>.  " waddch() "   
  159.     ^ self refreshWindow: winNumber
  160. |
  161.   printChar: c at: thePoint
  162.     <primitive 124 39 (thePoint y) (thePoint x) c>. " mvaddch() "
  163.     ^ self refreshScreen
  164. |
  165.   printWindowChar: winNumber char: c at: thePoint
  166.     <primitive 124 40 winNumber (thePoint y) (thePoint x) c>. " mvwaddch()"
  167.     ^ self refreshWindow: winNumber
  168. |
  169.   printString: string
  170.     <primitive 124 41 string>.
  171.     ^ self refreshScreen
  172. |
  173.   printWindowString: winNumber string: string
  174.     <primitive 124 42 winNumber string>.
  175.     ^ self refreshWindow: winNumber
  176. |
  177.   printString: string at: thePoint
  178.     <primitive 124 43 (thePoint y) (thePoint x) string>.
  179.     ^ self refreshScreen
  180. |
  181.   printWindowString: winNumber string: string at: thePoint
  182.     <primitive 124 44 winNumber (thePoint y) (thePoint x) string>.
  183.     ^ self refreshWindow: winNumber
  184. |
  185.   setAttributes: attrs
  186.                  " attrs is one or more of the following:
  187.                          NORMAL    = 0
  188.                          INVERSE   = 16
  189.                          UNDERLINE = 32
  190.                          BOLD      = 64
  191.                  "
  192.     <primitive 124 53 attrs>.
  193.     ^ self refreshScreen
  194. |
  195.   setWindowAttributes: winNumber attr: attrs
  196.                  " attrs is one or more of the following:
  197.                          NORMAL    = 0
  198.                          INVERSE   = 16
  199.                          UNDERLINE = 32
  200.                          BOLD      = 64
  201.                  "
  202.     <primitive 124 54 winNumber attrs>.
  203.     ^ self refreshWindow: winNumber
  204. |
  205.   addAttributes: attrs
  206.                  " attrs is one or more of the following:
  207.                          NORMAL    = 0
  208.                          INVERSE   = 16
  209.                          UNDERLINE = 32
  210.                          BOLD      = 64
  211.                  "
  212.     <primitive 124 55 attrs>.
  213.     ^ self refreshScreen
  214. |
  215.   addWindowAttributes: winNumber attr: attrs
  216.                  " attrs is one or more of the following:
  217.                          NORMAL    = 0
  218.                          INVERSE   = 16
  219.                          UNDERLINE = 32
  220.                          BOLD      = 64
  221.                  "
  222.     <primitive 124 56 winNumber attrs>.
  223.     ^ self refreshWindow: winNumber
  224. |
  225.   removeAttributes: attrs
  226.                  " attrs is one or more of the following:
  227.                          NORMAL    = 0
  228.                          INVERSE   = 16
  229.                          UNDERLINE = 32
  230.                          BOLD      = 64
  231.                  "
  232.     <primitive 124 57 attrs>.
  233.     ^ self refreshScreen
  234. |
  235.   removeWindowAttributes: winNumber attr: attrs
  236.                  " attrs is one or more of the following:
  237.                          NORMAL    = 0
  238.                          INVERSE   = 16
  239.                          UNDERLINE = 32
  240.                          BOLD      = 64
  241.                  "
  242.     <primitive 124 58 winNumber attrs>.
  243.     ^ self refreshWindow: winNumber
  244. |
  245.   invertColors
  246.     <primitive 124 59>.           "  standout() "
  247.     ^ self refreshScreen
  248. |
  249.   invertWindowColors: winNumber
  250.     <primitive 124 60 winNumber>. " wstandout() "
  251.     ^ self refreshWindow: winNumber
  252. |
  253.   revertColors
  254.     <primitive 124 61>.           " standend()  "
  255.     ^ self refreshScreen
  256. |
  257.   revertWindowColors: winNumber
  258.     <primitive 124 62 winNumber>. " wstandend() "
  259.     ^ self refreshWindow: winNumber
  260. |
  261.   emptyScreen
  262.     <primitive 124 45>.             " erase()   "
  263.     ^ self refreshScreen
  264. |
  265.   emptyWindow: winNumber
  266.     <primitive 124 46 winNumber>.   " werase()   "
  267.     ^ self refreshWindow: winNumber
  268. |
  269.   clearScreen
  270.     <primitive 124 47>.            " clear()    "
  271.     ^ self refreshScreen
  272. |
  273.   clearWindow: winNumber
  274.     <primitive 124 48 winNumber>.   " wclear()   "
  275.     ^ self refreshWindow: winNumber
  276. |
  277.   clearScreenToBottom
  278.     <primitive 124 49>.             " clrtobot() "
  279.     ^ self refreshScreen
  280. |
  281.   clearWindowToBottom: winNumber
  282.     <primitive 124 50 winNumber>.   " wclrtobot() "
  283.     ^ self refreshWindow: winNumber
  284. |
  285.   clearScreenToEOL
  286.     <primitive 124 51>.             " clrtoeol() "
  287.     ^ self refreshScreen
  288. |
  289.   clearWindowToEOL: winNumber
  290.     <primitive 124 52 winNumber>.   " wclrtoeol() "
  291.     ^ self refreshWindow: winNumber
  292. |
  293.   deleteChar
  294.     <primitive 124 31>. " delch() "
  295.     ^ self refreshScreen
  296. |
  297.   deleteWindowChar: winNumber
  298.     <primitive 124 32 winNumber>. " wdelch() "
  299.     ^ self refreshWindow: winNumber
  300. |
  301.   deleteCharAt: aPoint
  302.     <primitive 124 33 (aPoint y) (aPoint x)>. " mvdelch() "
  303.     ^ self refreshScreen
  304. |
  305.   deleteWindowChar: winNumber at: aPoint
  306.     <primitive 124 34 winNumber (aPoint y) (aPoint x)>. " mvwdelch() "
  307.     ^ self refreshWindow: winNumber
  308. |
  309.   getChar
  310.     ^ <primitive 124 13>                                 " getch()    "
  311. |
  312.   getWindowChar: winNumber
  313.     ^ <primitive 124 14 winNumber>                       " wgetch()   "
  314. |
  315.   getCharAt: aPoint
  316.     ^ <primitive 124 15 (aPoint y) (aPoint x)>           " mvgetch()  "
  317. |
  318.   getWindowChar: winNumber at: aPoint
  319.     ^ <primitive 124 16 winNumber (aPoint y) (aPoint x)> " mvwgetch() "
  320. |
  321.   getString: buffer
  322.     ^ <primitive 124 17 buffer>                          " getstr()   "
  323. |
  324.   getWindowString: winNumber buffer: string
  325.     ^ <primitive 124 18 winNumber string>                " wgetstr()  "
  326. |
  327.   getStringAt: aPoint buffer: string
  328.     ^ <primitive 124 19 (aPoint y) (aPoint x) string>    " mvgetstr() "
  329. |
  330.   getWindowString: winNumber at: aPoint buffer: string   " mvwgetstr() "
  331.     ^ <primitive 124 16 winNumber (aPoint y) (aPoint x) string>
  332. |
  333.   readChar
  334.     ^ <primitive 124 21>                                 " inch()    "
  335. |
  336.   readWindowChar: winNumber
  337.     ^ <primitive 124 22 winNumber>                       " winch()   "
  338. |
  339.   readCharAt: aPoint
  340.     ^ <primitive 124 23 (aPoint y) (aPoint x)>           " mvinch()  "
  341. |
  342.   readWindowChar: winNumber at: aPoint
  343.     ^ <primitive 124 24 winNumber (aPoint y) (aPoint x)> " mvwinch() "
  344. |
  345.   insertChar
  346.     <primitive 124 25>.                                 " insch()    "
  347.     ^ self refreshScreen
  348. |
  349.   insertWindowChar: winNumber
  350.     <primitive 124 26 winNumber>.                       " winsch()   "
  351.     ^ self refreshWindow: winNumber
  352. |
  353.   insertCharAt: aPoint
  354.     <primitive 124 27 (aPoint y) (aPoint x)>.           " mvinsch()  "
  355.     ^ self refreshScreen
  356. |
  357.   insertWindowChar: winNumber at: aPoint
  358.     <primitive 124 28 winNumber (aPoint y) (aPoint x)>. " mvwinsch() "
  359.     ^ self refreshWindow: winNumber
  360. |
  361.   insertLine
  362.     <primitive 124 29>.                                 " insertln() "
  363.     ^ self refreshScreen
  364. |
  365.   insertWindowLine: winNumber
  366.     <primitive 124 30 winNumber>.                       " winsertln()"
  367.     ^ self refreshWindow: winNumber
  368. |
  369.   deleteLine
  370.     <primitive 124 35>.                                 " deleteln() "
  371.     ^ self refreshScreen
  372. |
  373.   deleteWindowLine: winNumber
  374.     <primitive 124 36 winNumber>.                       " wdeleteln()"
  375.     ^ self refreshWindow: winNumber
  376. |
  377.   moveCursorTo: aPoint
  378.     <primitive 124 63 (aPoint y) (aPoint x)>. " move() "
  379.     ^ self refreshScreen
  380. |
  381.   moveWindowCursor: winNumber to: aPoint
  382.     <primitive 124 63 winNumber (aPoint y) (aPoint x)>. " wmove() "
  383.     ^ self refreshWindow: winNumber
  384. |
  385.   addToRefreshList: winNumber
  386.     ^ <primitive 124 12 winNumber> " wnoutrefresh() "
  387. |
  388.   updateWindows
  389.     ^ <primitive 124 11>           " doupdate() "
  390. |
  391.   flushKeys
  392.     ^ <primitive 124 81> " flushinp() "
  393. |
  394.   moveCursorFrom: aPoint to: newPoint " mvcur() "
  395.     <primitive 124 82 (aPoint y) (aPoint x) (newPoint y) (newPoint x)>.
  396.     ^ self refreshScreen
  397. ]
  398.